[TOC]
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म क्या कर सकता है?
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म मात्रात्मक ट्रेडिंग के क्षेत्र में सबसे पेशेवर मात्रात्मक समुदाय है। यहां आप मात्रात्मक रणनीतियों को सीख सकते हैं, लिख सकते हैं, साझा कर सकते हैं, खरीद और बेच सकते हैं; आप ऑनलाइन बैकटेस्टिंग कर सकते हैं और सिमुलेटेड ट्रेडिंग करने के लिए सिमुलेशन बॉट का उपयोग कर सकते हैं; आप लाइव ट्रेडिंग भी चला सकते हैं, प्रचार कर सकते हैं और देख सकते हैं। हम लगभग सभी मुख्यधारा के डिजिटल मुद्रा एक्सचेंजों का समर्थन करते हैं।
ट्यूटोरियल की पूरी श्रृंखला
ग्राफिक ट्यूटोरियलः
यदि कोई समस्या है, तो आप किसी भी समय प्रश्न पोस्ट कर सकते हैं और मंच पर चर्चा कर सकते हैं, या टिकट भेज सकते हैं, या टेलीग्राम समूह में एक व्यवस्थापक से संपर्क कर सकते हैं (तार), सामान्य तौर पर, इस प्रश्न का उत्तर शीघ्र दिया जाएगा।
विकास सहायता के लिए चैटजीपीटी का समर्थन
एफएमजेड क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म ने चैटजीपीटी को एक विकास सहायता उपकरण के रूप में अपनाया है, जिसे
मेरी रणनीतियों को लागू करने के लिए कौन सी प्रोग्रामिंग भाषाएँ उपलब्ध हैं?
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का उपयोग करने का समर्थन करता हैJavaScript
, TypeScript
, Python
, C++
, Pine
Mylanguage
औरBlockly Visualization
रणनीतियों को लिखने और डिजाइन करने के लिए।
यह समर्थन करता हैTypeScript
भाषा, अभी भी इसे सेट करेंJavaScript
रणनीति जब हम रणनीतियों बनाने, तो हम लिखते हैं// @ts-check
रणनीति कोड की शुरुआत में या बटन पर क्लिक करेंTypeScript
रणनीति संपादन क्षेत्र के ऊपरी दाएं कोने में स्विच करने के लिएTypeScript
. प्लेटफॉर्म कोड को पहचान लेगाTypeScript
स्वचालित रूप से और आप के लिए उपयुक्त संकलन और प्रकार की जाँच के समर्थन प्रदान करने के लिएः
TypeScript
के स्थिर प्रकार जाँच समारोह आप कोड लिखते समय संभावित त्रुटियों को खोजने और कोड की गुणवत्ता में सुधार करने में मदद कर सकते हैं.TypeScript
के प्रकार प्रणाली यह तेजी से विशेषताएं और विधि आप कोड लिखने के लिए की जरूरत है जब खोजने के लिए बनाता है, विकास दक्षता में सुधार.TypeScript
, आप अपने कोड को बेहतर ढंग से व्यवस्थित और बनाए रख सकते हैं, जिससे इसे पढ़ना और समझना आसान हो जाता है।TypeScript
शक्तिशाली ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सुविधाएँ प्रदान करता है, जैसे कि इंटरफेस, वर्ग, जेनेरिक आदि, आपको अधिक मजबूत और पुनः प्रयोज्य रणनीति कोड लिखने में मदद करता है।आपको केवल इन भाषाओं में से एक में महारत हासिल करने की आवश्यकता है। कोड लिखकर रणनीतियों को डिजाइन करने के तरीके का समर्थन करने के अलावा, आप दृश्य मॉड्यूल (ब्लॉकली) का उपयोग करके रणनीतियों का निर्माण भी कर सकते हैं। विज़ुअलाइज़ेशन मॉड्यूल स्प्लाईसिंग और बिल्डिंग रणनीति, बिना कोडिंग के, रणनीतियों को डिजाइन करने का एक अधिक सहज तरीका अपनाती है, जो रणनीतिक डिजाइन में रुचि विकसित करने के लिए बहुत उपयुक्त है ताकि प्रोग्राम और मात्रात्मक व्यापार के साथ जल्दी से शुरुआत हो सके।
Blockly
विज़ुअलाइज़ेशन ट्यूटोरियलः
सेट करें
Python
दुभाषिया का प्रयोगPython
रणनीतिक कार्यक्रम
रणनीतियों में लिखाPython
, जब बैकटेस्टिंग या लाइव ट्रेडिंग, अगर डॉकर सिस्टम वातावरण दोनों हैपायथन2औरपायथन3स्थापित, आप सेट कर सकते हैंPython
रणनीति की पहली पंक्ति पर रनटाइम पर लॉन्च किए जाने वाले संस्करण, जैसे#!python3
और#!python2
, ताकि सिस्टम स्वचालित रूप से दुभाषिया को ढूंढ लेगा. और आप एक पूर्ण पथ भी निर्दिष्ट कर सकते हैं, जैसेः#!/usr/bin/python3
.
डॉकर क्या है?
डॉकर को आपकी ट्रेडिंग रणनीति के निष्पादक के रूप में समझा जा सकता है, जो जटिल डेटा अनुरोधों, डेटा रिसेप्शन, नेटवर्क लिंक, लॉग पोस्टबैक आदि के लिए जिम्मेदार है। डॉकर आपके सर्वर पर चलता है, भले ही एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म वेबसाइट में नेटवर्क विफलता हो, यह आपके डॉकर के संचालन को प्रभावित नहीं करेगा। डॉकर पर चल सकता हैलिनक्स, खिड़कियाँ, मैक ओएस, एंड्रॉयड, रास्पबेरी पाई एआरएम लिनक्सऔर अन्य प्रणालियों।डॉकर पृष्ठ, लिनक्स डॉकर स्थापना और अद्यतन चरण. डॉकर द्वारा प्रबंधित बॉट और लॉग निर्देशिका में संग्रहीत होते हैं/logs/storage
फाइल एकSqlite
के साथ डेटाबेस फ़ाइलdb3
, जिसे सीधे संपादित किया जा सकता हैSqlite
विस्तार के साथ एक फ़ाइल के लिएdb3
वास्तविक बॉट डेटाबेस में, फ़ाइल नाम बॉट आईडी है।
समर्थित प्रोटोकॉल
जब एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म पर ट्रेडिंग रणनीतियों को विकसित किया जाता है, तो रणनीति सामग्री केवल एफएमजेड खाते धारकों के लिए दिखाई देती है। और एफएमजेड मात्रात्मक ट्रेडिंग प्लेटफॉर्म पर, आप रणनीति कोड के पूर्ण स्थानीयकरण को प्राप्त कर सकते हैं। उदाहरण के लिए, एक रणनीति तर्क को एक में कैप्सूल किया जा सकता हैPython
पैकेज, जो रणनीति कोड में लोड किया जाता है, ताकि रणनीति सामग्री स्थानीयकरण को महसूस किया जा सके।
सुरक्षाPython
कोडः
क्योंकिPython
यह एक ओपन सोर्स भाषा है जिसे डीकॉम्पाइल करना बेहद आसान है, यदि रणनीति व्यक्तिगत उपयोग के लिए नहीं है बल्कि किराए के लिए है, तो आप रणनीति को अपने स्वयं के तैनात डॉकर पर चला सकते हैं और इसे उप-खाता या पूर्ण डॉकर प्रबंधन के रूप में किराए पर ले सकते हैं यदि आप रणनीति रिसाव के बारे में चिंतित हैं।
के एन्क्रिप्शनPython
रणनीति कोडः
डिफ़ॉल्ट रूप से,Python
रणनीति कोड लेखक द्वारा उपयोग किए जाने पर एन्क्रिप्टेड नहीं है और दूसरों को किराए पर दिए जाने पर एन्क्रिप्टेड है।
निम्नलिखित कोड को संपादित करकेPython
रणनीति, आप निर्दिष्ट कर सकते हैं कि क्या निजी उपयोग या किराए के लिए रणनीति कोड एन्क्रिप्ट करने के लिए.Python
रणनीति कोड के एन्क्रिप्शन का समर्थन करने वाले संस्करण निम्नलिखित हैंःPython 2.7
, Python 3.5
औरPython 3.6
.
#!python
पायथन दुभाषिया के संस्करण के रूप में, और फिर उपयोग,
अलग रखने के लिए; एन्क्रिप्शन कमांड दर्ज करेंencrypt
यदि आप संस्करण निर्दिष्ट नहीं करते हैंPython
, जोड़ें#!,encrypt
directly. #!python,encrypt
या
#!encrypt
#!python, not encrypted
या
#!not encrypted
कोड का प्रयोग करेंos.getenv('__FMZ_ENV__')
यह निर्धारित करने के लिए कि एन्क्रिप्शन कोड मान्य है या नहीं; स्ट्रिंग की वापसी"encrypt"
यह केवल वास्तविक बॉट में मान्य है, और बैकटेस्ट एन्क्रिप्ट नहीं करेगाPython
रणनीति कोड।
#!encrypt
def main():
ret = os.getenv('__FMZ_ENV__')
# If the print variable ret is the string "encrypt" or ret == "encrypt" is true, that means the encryption is valid.
Log(ret, ret == "encrypt")
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म पर कॉन्फ़िगर किए गए रणनीति मापदंडों में खाते की जानकारी और एन्क्रिप्टेड स्ट्रिंग जैसे संवेदनशील डेटा, वेब ब्राउज़र पर एन्क्रिप्टेड होते हैं। एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म पर संग्रहीत सभी जानकारी एन्क्रिप्टेड होती है (सादे पाठ डेटा नहीं), और केवल उपयोगकर्ता
RSA KEY
एक्सचेंज की प्रमाणीकरण विधि एक उदाहरण के रूप में विस्तृत रूप से समझाने के लिए कि डॉकर प्रोग्राम स्थित डिवाइस पर स्थानीय रूप से संवेदनशील जानकारी को कैसे कॉन्फ़िगर किया जाए।PKCS#8
, सृजन के लिए कई उपकरण उपलब्ध हैं, जैसेopenssl
.RSA KEY
एक्सचेंज पर, और में बनाया सार्वजनिक कुंजी अपलोडचरण 1सृष्टि के दौरान।txt
फ़ाइल, या डॉकर कार्यक्रम की निर्देशिका में अन्य पथों में.RSA KEY
विनिमय द्वारा कॉन्फ़िगरेशन के संपादन बॉक्स में बनाया गयाAccess Key
.txt
फ़ाइल एक ही स्तर की निर्देशिका में रखा डॉकर मेंचरण 3कॉन्फ़िगरेशन के संपादन बॉक्स मेंSecret Key
. उदाहरण के लिए, यदि फ़ाइल नाम रखा गया हैःrsaKey.txt
, और फ़ाइल और डॉकर एक ही स्तर निर्देशिका में भरे जाते हैंःfile:///rsaKey.txt
. यदि फ़ाइल डॉकर प्रोग्राम की निर्देशिका के बगल में निर्देशिका में हैrsa_key
, भरेंःfile:///rsa_key//rsaKey.txt
. यदि आप जगहrsaKey. txt
अपने कंप्यूटर या सर्वर पर कहीं और इस निर्देश का पालन करें, यह ध्यान दिया जाना चाहिए कि यह फ़ाइल केवल या तो एक ही स्तर निर्देशिकाओं या डॉकर के संबंध में उपनिर्देशिकाओं में रखा जा सकता है।यह स्थानीयकरण और निजी कुंजी को बचाने के लिए सुरक्षित बनाता है, आप संदर्भित कर सकते हैंवीडियो व्याख्याविस्तृत प्रक्रिया के लिए।
बैकटेस्ट प्रणाली क्या है और इसका उपयोग किस लिए किया जाता है?
एक बार जब आप एक मात्रात्मक ट्रेडिंग रणनीति के डिजाइन को पूरा कर लेते हैं, तो आप अपनी रणनीति की बुनियादी स्थिति को कैसे जान सकते हैं, जैसे कि रणनीति का तर्क और रणनीति के रिटर्न की दिशा? बेशक, हम वास्तविक ट्रेडिंग बाजार पर रणनीति को चलाने के लिए सीधे वास्तविक धन का उपयोग नहीं कर सकते हैं, लेकिन हम आपकी रणनीति का परीक्षण करने के लिए ऐतिहासिक डेटा का उपयोग कर सकते हैं और ऐतिहासिक डेटा में आपकी रणनीति के लाभ को जान सकते हैं।
क्या बैकटेस्ट सिस्टम डेटा सटीक है और बैकटेस्ट परिणामों की सटीकता के बारे में क्या?
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म बैकटेस्ट प्रणाली को विभाजित करता हैवास्तविक बाजार स्तरऔरसिमुलेशन स्तर. वास्तविक बाजार स्तर को पूर्ण ऐतिहासिक डेटा के अनुसार पूरी तरह से बैकटेस्ट करना है; जबकि सिमुलेशन स्तर बैकटेस्ट उत्पन्न करता हैtick
दोनों वास्तविक ऐतिहासिक आंकड़ों पर आधारित हैं, लेकिन वास्तविक बाजार स्तर के आंकड़े अधिक सटीक हैं और परिणाम अधिक विश्वसनीय हैं।एफएमजेड बैकटेस्ट तंत्र का वर्णन. हालांकि, बैकटेस्टिंग केवल ऐतिहासिक डेटा के अनुसार रणनीति का प्रदर्शन है। ऐतिहासिक डेटा भविष्य के बाजार का पूरी तरह से प्रतिनिधित्व नहीं कर सकता है। ऐतिहासिक बाजार दोहरा सकता है, या यह ब्लैक स्वान का भी कारण बन सकता है। इसलिए, बैकटेस्ट परिणामों को तर्कसंगत और निष्पक्ष रूप से माना जाना चाहिए।
विभिन्न प्रोग्रामिंग भाषाओं की रणनीतियों का बैकटेस्ट करते समय ध्यान देने योग्य मुद्देः
के बैकटेस्टजावास्क्रिप्टऔरसी++ट्रेडिंग रणनीतियों ब्राउज़र में किया जाता है, और वास्तविक बाजार बॉट याWexAppअनुकरण किया विनिमय वास्तविक बाजार (यानीWexAppएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का अनुकरण किया गया एक्सचेंज) बिना किसी अन्य सॉफ्टवेयर, लाइब्रेरी या मॉड्यूल को स्थापित किए चलाता है। के बैकटेस्टपायथनयह डॉकर पर किया जाता है; यह एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म द्वारा जोड़े गए सार्वजनिक सर्वर पर किया जा सकता है, और यह उपयोगकर्ता के अपने डॉकर पर भी किया जा सकता है। वास्तविक बाजार संचालन और बैकटेस्ट दोनोंपायथनयदि कुछ पुस्तकालयों की आवश्यकता है, तो उन्हें मैन्युअल रूप से स्थापित करने की आवश्यकता है (केवल सार्वजनिक सर्वर पर सामान्य पुस्तकालयों का समर्थन किया जाता है) ।
सिस्टम में बैकटेस्ट डेटा
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म बैकटेस्ट के दो प्रकार हैंः सिमुलेशन स्तर बैकटेस्ट और वास्तविक बाजार स्तर बैकटेस्ट। सिमुलेशन स्तर बैकटेस्ट सिमुलेटेडtick
प्रत्येक K-लाइन अवधि 12 बैकटेस्टिंग समय बिंदु उत्पन्न करेगा; हालांकि, वास्तविक बाजार स्तर एकत्र करता हैticks
एफएमजेड के बैकटेस्ट तंत्र से ट्रेडिंग रणनीति को एक ही के-लाइन पर कई बार ट्रेड करने की अनुमति मिलती है, जिससे ऐसी स्थिति से बचा जा सकता है जहां ट्रेडिंग केवल बंद मूल्य पर निष्पादित की जा सकती है। यह बैकटेस्ट की गति को ध्यान में रखते हुए अधिक सटीक है। अधिक विस्तृत स्पष्टीकरण के लिए, कृपया देखेंलिंक.
बैकटेस्टिंग प्रणाली में रणनीति डीबीयूजी विधि
क्रोम DevTools में जावास्क्रिप्ट रणनीति बैकटेस्टिंग डिबगिंग
एन्क्रिप्टेड मुद्रा (क्रिप्टोकरेंसी)
नाम | प्रकार | निर्देश |
---|---|---|
बिटकॉइन | स्पॉट विनिमय वस्तु | सीमित व्यापारिक जोड़े का समर्थन करना, जैसेःBTC_USD , ETH_USD औरLTC_USD , आदि (ध्यान दें कि ट्रेडिंग जोड़े की बोली मुद्राUSD डॉलर) |
बाइनेंस | स्पॉट विनिमय वस्तु | सीमित व्यापारिक जोड़े का समर्थन करना, जैसेःBTC_USDT , ETH_USDT , ETH_BTC औरLTC_BTC आदि। |
ओकेएक्स | स्पॉट विनिमय वस्तु | सीमित व्यापारिक जोड़े का समर्थन करना, जैसेःBTC_USDT , ETH_USDT , ETH_BTC औरLTC_BTC आदि। |
हुओबी | स्पॉट विनिमय वस्तु | सीमित व्यापारिक जोड़े का समर्थन करना, जैसेःBTC_USDT , ETH_USDT , ETH_BTC औरLTC_BTC आदि। |
ओकेएक्स वायदा | वायदा विनिमय वस्तु | सीमित व्यापारिक जोड़े का समर्थन करना, जैसेःBTC_USD औरETH_USD , आदि; व्यापारिक जोड़े की बोली मुद्रा हैUSD ; विशिष्ट अनुबंध कोड की स्थापना के बाद (कृपया फ़ंक्शन देखेंexchange.SetContractType ), अनुबंध क्रिप्टो-मार्जिन अनुबंध है; समर्थित अनुबंध कोड में शामिल हैंःthis_week , next_week , quarter औरswap |
HuobiDM | वायदा विनिमय वस्तु | HuobiDM Huobi Futures (Huobi Contract) है, जो सीमित व्यापारिक जोड़े का समर्थन करता है, जैसेःBTC_USD औरETH_USD , आदि; व्यापारिक जोड़े की बोली मुद्रा हैUSD ; विशिष्ट अनुबंध कोड की स्थापना के बाद (कृपया फ़ंक्शन देखेंexchange.SetContractType ), अनुबंध क्रिप्टो-मार्जिन अनुबंध है; समर्थित अनुबंध कोड में शामिल हैंःthis_week , next_week , quarter औरswap . |
बिटमेक्स | वायदा विनिमय वस्तु | व्यापारिक जोड़ी हैXBT_USD ; विशिष्ट अनुबंध कोड की स्थापना के बाद (कृपया फ़ंक्शन देखेंexchange.SetContractType ), अनुबंध एक क्रिप्टो-मार्जिन अनुबंध है; समर्थित अनुबंध कोड हैःXBTUSD |
बाइनेंस वायदा | वायदा विनिमय वस्तु | सीमित व्यापारिक जोड़े का समर्थन करना, जैसेःBTC_USDT औरETH_USDT , आदि; व्यापारिक जोड़े की बोली मुद्रा हैUSD ; विशिष्ट अनुबंध कोड की स्थापना के बाद (कृपया फ़ंक्शन देखेंexchange.SetContractType ), यह अनुबंध एकUSDT - मार्जिन अनुबंध; समर्थित अनुबंध कोड हैswap |
डेरिबिट विकल्प | वायदा विनिमय वस्तु | व्यापारिक जोड़े हैंःBTC_USD औरETH_USD ; विशिष्ट अनुबंध कोड की स्थापना के बाद (कृपया फ़ंक्शन देखेंexchange.SetContractType ), अनुबंध क्रिप्टो-मार्जिन अनुबंध है; विशिष्ट विकल्प अनुबंध कोड निर्धारित करने की आवश्यकता है |
बैकटेस्ट प्रणाली में फ्यूचर्स एक्सचेंज ऑब्जेक्ट्स के लिए, ट्रेडिंग जोड़े बदलना अस्थायी रूप से रणनीति कोड में समर्थित नहीं है।
सिमुलेशन स्तर बैकटेस्ट बैकटेस्ट सिस्टम के अंतर्निहित के-लाइन डेटा पर आधारित है, जो एक निश्चित एल्गोरिथ्म के अनुसार दिए गए अंतर्निहित के-लाइन बार के उच्चतम मूल्य, सबसे कम मूल्य, उद्घाटन मूल्य और समापन मूल्य मूल्यों के ढांचे के भीतर टिक डेटा का अनुकरण करता है। डेटा वास्तविक समय में लौटाएगाtick
जब इंटरफेस का अनुरोध किया जाता है तो डेटा। विवरण के लिए कृपया देखेंःएफएमजेड क्वांट सिमुलेशन लेवल बैकटेस्ट तंत्र विवरण.
वास्तविक बाजार स्तर का बैकटेस्ट वास्तविकtick
बार समय श्रृंखला में स्तर डेटा।tick
वास्तविक बाजार के स्तर के डेटा का उपयोग करने के लिए बैकटेस्ट वास्तविकता के करीब है।tick
डेटा वास्तविक रिकॉर्ड किए गए डेटा हैं, सिमुलेटेड नहीं। यह गहराई डेटा, रिकॉर्ड डेटा प्लेबैक का समर्थन करता है बाजार के व्यापार, कस्टम गहराई और प्रत्येक व्यक्तिगत ट्रेडिंग डेटा। वास्तविक बाजार स्तर के डेटा बैकटेस्ट का अधिकतम आकार अधिकतम 50MB तक है, डेटासेट की ऊपरी सीमा के भीतर बैकटेस्ट समय सीमा पर कोई सीमा नहीं है। यदि आपको बैकटेस्ट समय सीमा को यथासंभव बड़ा करने की आवश्यकता है, तो आप गहराई सेटिंग गियर का मूल्य कम कर सकते हैं और बैकटेस्ट समय सीमा बढ़ाने के लिए प्रत्येक व्यक्तिगत ट्रेडिंग डेटा का उपयोग नहीं कर सकते हैं।GetDepth
,GetTrades
समयरेखा पर बाजार के आंकड़ों के एक क्षण में, कॉलGetTicker
,GetTrades
, GetDepth
औरGetRecords
जब समय बैकटेस्ट टाइमलाइन पर आगे बढ़ता है (जो अगले बाजार डेटा क्षण में कूदने को ट्रिगर नहीं करेगा) तो समय को कई बार नहीं बढ़ाएगा। उपरोक्त कार्यों में से किसी एक पर दोहराए जाने वाले कॉल बैकटेस्ट समय को बैकटेस्ट टाइमलाइन पर आगे बढ़ने के लिए आगे बढ़ाएंगे (अगले बाजार डेटा क्षण में कूदेंगे) । जब बैकटेस्ट के लिए वास्तविक बाजार स्तर का उपयोग किया जाता है, तो पहले समय का चयन करने की अनुशंसा नहीं की जाती है। प्रारंभिक समय अवधि में वास्तविक बाजार स्तर के डेटा नहीं हो सकते हैं।
वास्तविक बाजार स्तर बैकटेस्ट वर्तमान में समर्थन करता है:
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के बैकटेस्ट सिस्टम का पैरामीटर अनुकूलन कार्य बैकटेस्ट के दौरान प्रत्येक पैरामीटर अनुकूलन विकल्प के अनुसार अनुकूलन सेट करना है, और विकल्प निम्नानुसार दिखाए गए हैंः
पैरामीटर संयोजन उत्पन्न करें, और उन सभी संयोजनों को बैकटेस्ट करने के लिए पार करें (अर्थात प्रत्येक पैरामीटर संयोजन को एक बार बैकटेस्ट करना) ।संख्याप्रकार का बैकटेस्टिंग प्रणाली में अनुकूलित किया जा सकता है।
उदाहरण के लिए, बैकटेस्ट पृष्ठ पर पैरामीटर अनुकूलन विकल्प सेट करेंः
पैरामीटर अनुकूलन मोड का बैकटेस्टः
रणनीति संपादन पृष्ठ में,
लेनाJavaScript
उदाहरण के रूप में रणनीति, और क्लिक करें
JavaScript
, Python
, cpp
औरMylanguage
:
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
माइलैंग्वेज:
(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)
यह प्रणालीGET
बैकटेस्ट के लिए बाहरी डेटा स्रोत प्राप्त करने के लिए एक कस्टम URL (सार्वजनिक रूप से सुलभ URL) का अनुरोध करने की विधि। अतिरिक्त अनुरोध मापदंड निम्नलिखित हैं:
पैरामीटर | अर्थ | स्पष्टीकरण |
---|---|---|
प्रतीक | प्रतीक का नाम | जैसे BTC_USD_OKCoin_EN |
ईद | आदान-प्रदान | जैसे कि OKCoin_EN |
गोल | मूल्य सटीकता | जैसे 3, लौटाए गए डेटा में कीमत 1000 से गुणा और गोल किया जाना चाहिए |
चारों ओर | मात्रा सटीकता | जैसे 2, लौटाए गए डेटा में राशि 100 से गुणा और गोल किया जाना चाहिए |
अवधि | बार अवधि (मिलीसेकंड) | उदाहरण के लिए 60,000 बार एक मिनट के लिए अनुरोध का संकेत |
गहराई | गहराई के स्तर | 1-20 |
व्यापार | डेटा को विभाजित करने की आवश्यकता है या नहीं | सच/झूठ |
से | प्रारंभ समय | यूनिक्स टाइमस्टैम्प |
करने के लिए | अंत का समय | यूनिक्स टाइमस्टैम्प |
नोटः
Round and V-Round are two parameters designed to avoid losing the precision of floating-point numbers during network transmission. The price data, trading volume and order amount, are all transmitted using integers.
सिले हुए डेटा का एक उदाहरणः
http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200
लौटाया गया प्रारूप निम्नलिखित दो प्रारूपों में से एक होना चाहिए (जो सिस्टम द्वारा स्वचालित रूप से पहचाना जाएगा):
सामान्य बार-स्तरीय बैकटेस्ट
{
"schema":["time","open","high","low","close","vol"],
"data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}
टिक-लेवल बैकटेस्ट डेटा (बाजार गहराई की जानकारी सहित, [मूल्य, मात्रा] के गहराई प्रारूप के साथ एक सरणी; गहराई के कई स्तर हो सकते हैं;
पूछता है मूल्य वृद्धि क्रम को संदर्भित करता है, और बोली मूल्य रिवर्स क्रम को संदर्भित करता है।
{
"schema":["time","asks", "bids","trades","close","vol"],
"data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}
विवरण
क्षेत्र | विवरण |
---|---|
स्कीमा | यह डेटा सरणी में स्तंभों की विशेषताओं को निर्दिष्ट करता है, जो केस संवेदनशील है और केवल |
डेटा | एक सरणी जो स्कीमा द्वारा डेटा संग्रहीत करती है |
डेटा प्रारूप
क्षेत्र | विवरण |
---|---|
पूछताछ/प्रस्ताव | [मूल्य, मात्रा],...] |
व्यापार | [[समय, दिशा ((0:खरीद,1:बिक्री),मूल्य,मात्रा],...] |
वित्तपोषण दर के आंकड़े प्रदान करना:
उदाहरण के लिए, बिनेंस फ्यूचर्स बैकटेस्ट करते समय, फंडिंग दर के अतिरिक्त डेटा होना आवश्यक है, जिसे कस्टम डेटा स्रोत द्वारा प्रदान करने की आवश्यकता होती है। उदाहरण के लिए, बिनेंस फ्यूचर्स के बैकटेस्ट के दौरान अनुरोधित फंडिंग दर का डेटा संरचना निम्नानुसार दिखाया गया हैः
{
"detail": {},
"symbol": "futures_binance.eth_usdt.funding",
"schema": ["time", "open", "high", "low", "close", "vol"],
"data": [
[1582876800000, 25289, 25289, 25289, 25289, 0],
[1582905600000, 30522, 30522, 30522, 30522, 0],
[1582934400000, 40998, 40998, 40998, 40998, 0],
...
[1626652800000, 198, 198, 198, 198, 0],
[1626681600000, 691, 691, 691, 691, 0], // The adjacent periodic interval is 8 hours
[1626710400000, 310, 310, 310, 310, 0], // The funding rate of Binance updates every 8 hours, and why the data of the funding rate turns out to be 310?
[1626739200000, 310, 310, 310, 310, 0], // Like the bars data, to avoid losing the precision of floating-point numbers during network transmission, the data uses integer, so the data needs to be processed according to round parameter; the data, returned to the backtest system after processing, is 310
[1626768000000, -41610, -41610, -41610, -41610, 0], // The funding rate might be a negative value
[1626796800000, -5125, -5125, -5125, -5125, 0],
...
[1627977600000, 10000, 10000, 10000, 10000, 0]
]
}
बैकटेस्ट प्रणाली से डेटा अनुरोध का एक उदाहरणः
http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400
कस्टम डेटा स्रोत का उदाहरणः
डेटा स्रोत निर्दिष्ट करें, URL:http://xxx.xx.x.xx:9090/data
गोलांग में लिखे गए डेटा सर्वर को अनुकूलित करेंः
package main
import (
"fmt"
"net/http"
"encoding/json"
)
func Handle (w http.ResponseWriter, r *http.Request) {
// e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
// r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
// response
defer func() {
// response data
/* e.g. data
{
"schema":["time","open","high","low","close","vol"],
"data":[
[1564315200000,9531300,9531300,9497060,9497060,787],
[1564316100000,9495160,9495160,9474260,9489460,338]
]
}
*/
ret := map[string]interface{}{
"schema" : []string{"time","open","high","low","close","vol"},
"data" : []interface{}{
[]int64{1564315200000,9531300,9531300,9497060,9497060,787},
[]int64{1564316100000,9495160,9495160,9474260,9489460,338},
},
}
b, _ := json.Marshal(ret)
w.Write(b)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
परीक्षण रणनीति,JavaScript
उदाहरण:
/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
platforms: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/
function main() {
var ticker = exchange.GetTicker()
var records = exchange.GetRecords()
Log(ticker)
Log(records)
}
बैकटेस्ट प्रणाली में कस्टम डेटा द्वारा तैयार चार्टः
रणनीति मुद्रण जानकारीः
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म नेJavaScript
संस्करण औरPython
स्थानीय बैकटेस्ट इंजन का संस्करण, समर्थन सेटिंगअंतर्निहित के लाइन अवधिबैकटेस्टिंग के दौरान।
रणनीति
कुंजी का प्रयोग करेंCtrl +,
Ctrl
, कुंजी दबाएँ,
.
बचत रणनीति के लिए शॉर्टकट कुंजी
कुंजी का प्रयोग करेंCtrl + s
रणनीतियों को बचाने के लिए।
रणनीति बैकटेस्ट शुरू करने के लिए शॉर्टकट
कुंजी का प्रयोग करेंCtrl + b
फ़ंक्शन का नाम | विवरण |
---|---|
main() |
यह एक प्रवेश समारोह है। |
onexit() |
यह सामान्य रूप से बाहर निकलने पर एक सफाई कार्य है, इसका अधिकतम निष्पादन समय 5 मिनट है, जिसे अघोषित छोड़ दिया जा सकता है; यदि टाइमआउट होता है, तोबाधित करनात्रुटि की सूचना दी जाएगी। |
onerror() |
यह एक असामान्य निकास समारोह है, इसके अधिकतम निष्पादन समय 5 मिनट है, जो अघोषित छोड़ दिया जा सकता है।Python औरcpp इस फ़ंक्शन का समर्थन नहीं करते. |
init() |
यह एक आरंभिकरण समारोह है, इसकी रणनीति कार्यक्रम स्वचालित रूप से कहा जाएगा जब यह चल रहा है शुरू होता है, जो undeclared छोड़ दिया जा सकता है. |
onerror()
.onerror()
बॉट में ट्रिगर किया जाता है, समारोहonexit()
ट्रिगर नहीं किया जाएगा।onexit()
, प्रसंस्करण सफाई कार्य, अधिकतम 5 मिनट के निष्पादन समय के साथ, जो उपयोगकर्ता द्वारा महसूस किया जाता है।
function main(){
Log("Start running, stop after 5 seconds, and execute onexit function!")
Sleep(1000 * 5)
}
// onexit function implementation
function onexit(){
var beginTime = new Date().getTime()
while(true){
var nowTime = new Date().getTime()
Log("The program stops counting down..The cleaning starts and has passed:", (nowTime - beginTime) / 1000, "Seconds!")
Sleep(1000)
}
}
import time
def main():
Log("Start running, stop after 5 seconds, and execute onexit function!")
Sleep(1000 * 5)
def onexit():
beginTime = time.time() * 1000
while True:
ts = time.time() * 1000
Log("The program stops counting down..The cleaning starts and has passed:", (ts - beginTime) / 1000, "Seconds!")
Sleep(1000)
void main() {
Log("Start running, stop after 5 seconds, and execute onexit function!");
Sleep(1000 * 5);
}
void onexit() {
auto beginTime = Unix() * 1000;
while(true) {
auto ts = Unix() * 1000;
Log("The program stops counting down..The cleaning starts and has passed:", (ts - beginTime) / 1000, "Seconds!");
Sleep(1000);
}
}
उपयोगकर्ता आरंभिकरण फ़ंक्शन को लागू करता हैinit()
, जो स्वचालित रूप से कार्य निष्पादित करेगाinit()
प्रारंभ कार्य को पूरा करने के लिए रणनीति की शुरुआत में।
function main(){
Log("The first line of the code executed in the program!", "#FF0000")
Log("Exit!")
}
// Initialization Function
function init(){
Log("Initialization!")
}
def main():
Log("The first line of the code is executed!", "#FF0000")
Log("Exit!")
def init():
Log("Initialization!")
void main() {
Log("The first line of the code is executed!", "#FF0000");
Log("Exit!");
}
void init() {
Log("Initialization!");
}
कार्य का निष्पादनonerror()
जब कोई अपवाद होता है, तो ट्रिगर किया जाएगा। यह फ़ंक्शन में लिखी गई रणनीतियों का समर्थन नहीं करता हैPython
औरcpp
.
function main() {
var arr = []
Log(arr[6].Close)
}
function onerror() {
Log("error")
}
# not supported by python
// not supported by C++
में लिखी गई रणनीतियों मेंJavaScript
, Python
औरcpp
,Sleep()
function को उन रणनीतियों के मुख्य लूप में बुलाया जाना चाहिए। इसका उपयोग बैकट्रैकिंग गति को नियंत्रित करने के लिए किया जाएगा। बॉट में, इसका उपयोग रणनीति पोलिंग अंतराल को नियंत्रित करने के लिए किया जाता है, और एक्सचेंज के एपीआई इंटरफ़ेस तक पहुंचने की अनुरोध आवृत्ति को भी नियंत्रित करता है।
क्रिप्टोक्यूरेंसी रणनीतियों के बुनियादी ढांचे के उदाहरणः
function onTick(){
//Write strategy logic here, and it will be called constantly, such as printing market information
Log(exchange.GetTicker())
}
function main(){
while(true){
onTick()
//The function "Sleep" is mainly used to control the polling frequency of cryptocurrency strategies to prevent accessing the exchange API interafce too frequently
Sleep(60000)
}
}
def onTick():
Log(exchange.GetTicker())
def main():
while True:
onTick()
Sleep(60000)
void onTick() {
Log(exchange.GetTicker());
}
void main() {
while(true) {
onTick();
Sleep(60000);
}
}
सबसे सरल उदाहरण ले लो, अगर मैं एक खरीद आदेश 100 की कीमत के साथ और एक्सचेंज पर 1 की मात्रा में हर दूसरे जगह करना चाहते हैं, मैं इसे इस तरह लिख सकते हैंः
function onTick(){
// It is just an example; for all the assets will be used to place orders fast during backtest or in the bot, do not implement the example in the bot
exchange. Buy(100, 1)
}
function main(){
while(true){
onTick()
// The pause period can be customized in millisecond (1 second = 1000 milliseconds)
Sleep(1000)
}
}
def onTick():
exchange.Buy(100, 1)
def main():
while True:
onTick()
Sleep(1000)
void onTick() {
exchange.Buy(100, 1);
}
void main() {
while(true) {
onTick();
Sleep(1000);
}
}
..टेम्पलेट लाइब्रेरीएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म में एक पुनः प्रयोज्य कोड मॉड्यूल है, जो ट्रेडिंग रणनीति कोड की श्रेणी के रूप में काम करता है।टेम्पलेट लाइब्रेरी, एक टेम्पलेट उस खाते के
JavaScript
:
Python
:
cpp
:
/*
-- This method is called directly with $.Test() after the strategy refers to the template
-- The "main" function will not be triggered in the strategy, and it is only used as the entry point for template debugging
*/
$.Test = function() {
Log('Test')
}
function main() {
$.Test()
}
def Test():
Log("template call")
# Export "Test" function; the main strategy can be called by ext.Test()
ext.Test = Test
// The strategy refers to the template and calls this method directly with ext::Test()
void Test() {
Log("template call");
}
टेम्पलेट लाइब्रेरी कोडः
$.SetParam1 = function(p1) {
param1 = p1
}
$.GetParam1 = function() {
Log("param1:", param1)
return param1
}
def SetParam1(p1):
global param1
param1 = p1
def GetParam1():
Log("param1:", param1)
return param1
ext.SetParam1 = SetParam1
ext.GetParam1 = GetParam1
void SetParam1(float p1) {
param1 = p1;
}
float GetParam1() {
Log("param1:", param1);
return param1;
}
संदर्भ में रणनीति कोड देखेंटेम्पलेट लाइब्रेरीउपरोक्त उदाहरण:
function main () {
Log("call $.GetParam1:", $.GetParam1())
Log("call $.SetParam1:", "#FF0000")
$.SetParam1(20)
Log("call $.GetParam1:", $.GetParam1())
}
def main():
Log("call ext.GetParam1:", ext.GetParam1())
Log("call ext.SetParam1:", "#FF0000")
ext.SetParam1(20)
Log("call ext.GetParam1:", ext.GetParam1())
void main() {
Log("call ext::GetParam1:", ext::GetParam1());
Log("call ext::SetParam1:", "#FF0000");
ext::SetParam1(20);
Log("call ext::GetParam1:", ext::GetParam1());
}
उद्धरण
रणनीति संपादन पृष्ठ के टेम्पलेट स्तंभ में संदर्भ की जाँच करने के बाद, रणनीति को सहेजें.
Exchange
एक्सचेंज ऑब्जेक्ट के रूप में माना जा सकता है। डिफ़ॉल्ट रूप से, इसे रणनीति मापदंडों में जोड़ा गया पहला एक्सचेंज ऑब्जेक्ट माना जाता है। एक्सचेंज के साथ सभी डेटा बातचीत इस ऑब्जेक्ट में कार्यों के माध्यम से महसूस की जाती है।
जोड़े गए विनिमय वस्तुएंexchange
कोड में वस्तुएंः
function main() {
Log("The name of the first exchange object added on the bot page or backtest page:", exchange.GetName(), ", Label:", exchange.GetLabel())
}
def main():
Log("The name of the first exchange object added on the bot page or backtest page:", exchange.GetName(), ", Label:", exchange.GetLabel())
void main() {
Log("The name of the first exchange object added on the bot page or backtest page:", exchange.GetName(), ", Label:", exchange.GetLabel());
}
यह एक सरणी के रूप में समझा जा सकता है जो सभी विनिमय वस्तुओं को संग्रहीत करता है जैसेexchange
एक्सचेंज ऑब्जेक्ट, जिसमें कई एक्सचेंज ऑब्जेक्ट हो सकते हैं;exchanges[0]
हैexchange
.
जोड़े गए विनिमय वस्तुओं के अनुरूपexchanges[0]
, exchanges[1]
, exchanges[2]
... और इसी तरह रणनीति कोड में।
function main() {
for(var i = 0; i < exchanges.length; i++) {
Log("Index of the exchange object added (the first one is 0 and so on):", i, "Name:", exchanges[i].GetName(), "Label:", exchanges[i].GetLabel())
}
}
def main():
for i in range(len(exchanges)):
Log("Index of the exchange object added (the first one is 0 and so on):", i, "Name:", exchanges[i].GetName(), "Label:", exchanges[i].GetLabel())
void main() {
for(int i = 0; i < exchanges.size(); i++) {
Log("Index of the exchange object added (the first one is 0 and so on):", i, "Name:", exchanges[i].GetName(), "Label:", exchanges[i].GetLabel());
}
}
विशेषताStatus
मेंOrder
structure.
निरंतर नाम | परिभाषा | मूल्य |
---|---|---|
ORDER_STATE_PENDING | अधूरा | 0 |
ORDER_STATE_CLOSED | समाप्त | 1 |
ORDER_STATE_CANCELED | निरस्त | 2 |
ORDER_STATE_UNKNOWN | अज्ञात अवस्था (अन्य अवस्थाएं) | 3 |
ORDER_STATE_UNKNOWNस्थिति कॉल कर सकते हैंexchange.GetRawJSON()
मूल आदेश स्थिति की जानकारी प्राप्त करने के लिए, विनिमय फ़ाइल में क्वेरी करें, और विशिष्ट विवरण देखें।
फॉर्म में स्थिरांक नामों का उपयोग सीधे रणनीति कोड में विशेषता के साथ तुलना करने के लिए किया जा सकता हैStatus
मेंOrder
संरचना, आदेश की स्थिति सुनिश्चित करने के लिए यह देखते हुए कि क्या वे बराबर हैं।निरंतर नामऔर उनके अनुरूपमूल्य, और नीचे दिए गए अन्य स्थिरांक नाम उसी तरह से काम करते हैं, इसलिए उनके बारे में अधिक विस्तृत विवरण नहीं होंगे।
विशेषताType
मेंOrder
structure.
निरंतर नाम | परिभाषा | मूल्य |
---|---|---|
ORDER_TYPE_BUY | क्रय आदेश | 0 |
ORDER_TYPE_SELL | बेचने का आदेश | 1 |
विशेषताType
मेंPosition
structure.
निरंतर नाम | परिभाषा | विवरण | लागू | मूल्य |
---|---|---|---|---|
PD_LONG | लंबी स्थिति | क्रिप्टोकरेंसी वायदा उपयोगexchange.SetDirection("closebuy") बंद स्थिति दिशा सेट करने के लिए, और पदों के इस प्रकार को बंद |
क्रिप्टोकरेंसी वायदा | 0 |
पीडी_शॉर्ट | लघु स्थिति | क्रिप्टोकरेंसी वायदा उपयोगexchange.SetDirection("closesell") बंद स्थिति दिशा सेट करने के लिए, और पदों के इस प्रकार को बंद |
क्रिप्टोकरेंसी वायदा | 1 |
विशेषताOffset
मेंOrder
structure.
निरंतर नाम | परिभाषा | मूल्य |
---|---|---|
ORDER_OFFSET_OPEN | खुले पद के आदेश | 0 |
ORDER_OFFSET_CLOSE | क्लोज पोजीशन ऑर्डर | 1 |
ट्रेडिंग रणनीति कोड में, रणनीति इंटरफेस पर निर्धारित रणनीति मापदंडों को वैश्विक चर के रूप में दर्शाया गया है।JavaScript
भाषा सीधे रणनीति इंटरफ़ेस पर सेट या संशोधित पैरामीटर मूल्यों का उपयोग कर सकते हैं; जबकि मेंPython
रणनीतियों, कीवर्डglobal
रणनीति में समग्र चर को संशोधित करने के लिए आवश्यक है।
पैरामीटर प्रकारः
चर | विवरण | टिप्पणी | प्रकार | डिफ़ॉल्ट मान | विवरण |
---|---|---|---|---|---|
संख्या | संख्यात्मक प्रकार | टिप्पणी | संख्या (संख्या) | 1 | C++ रणनीति एक फ्लोटिंग-पॉइंट प्रकार है |
स्ट्रिंग | स्ट्रिंग | टिप्पणी | स्ट्रिंग (स्ट्रिंग) | हैलो एफएमजेड | डिफ़ॉल्ट मान को उद्धृत करने की आवश्यकता नहीं है. इनपुट को स्ट्रिंग के रूप में माना जाता है |
कंबाक्स | कॉम्बोबॉक्स | टिप्पणी | ComboBox (चयनित) | 1|2|3 | कॉम्बोबॉक्स चर स्वयं एक संख्यात्मक मान है, जो कॉम्बोबॉक्स नियंत्रण द्वारा चयनित स्तंभ के सूचकांक का प्रतिनिधित्व करता है। पहला कॉम्बोबॉक्स का मान 1 है, और अन्य 0 है, और इसी तरह |
बोल | जाँच विकल्प | टिप्पणी | बुलियन (सही/गलत) | सच | यदि जाँच की जाती है, तो चर bool सही है; यदि जाँच नहीं की जाती है, तो चर bool गलत है |
गुप्त स्ट्रिंग | एन्क्रिप्टेड स्ट्रिंग | टिप्पणी | एन्क्रिप्टेड स्ट्रिंग (स्ट्रिंग) | पासवर्ड | एक स्ट्रिंग के समान उपयोग के साथ, एन्क्रिप्टेड स्ट्रिंग एन्क्रिप्शन द्वारा भेजी जाएगी और सादे पाठ में प्रेषित नहीं की जाएगी |
number
, string
, combox
, bool
, secretString
.पैरामीटर निर्भरता सेटिंग्सः
एक पैरामीटर सेट किया जा सकता है एक और पैरामीटर प्रदर्शित करने और पैरामीटर के चयन के आधार पर छिपा दिया जा करने के लिए अनुमति देने के लिए. उदाहरण के लिए, हम पैरामीटर सेटnumberA
, जो एक संख्यात्मक प्रकार है। हम चलोnumberA
प्रदर्शित या छिपाया जा सकता है पर निर्भर करता है कि पैरामीटरisShowA
(बुलियन प्रकार) सच या गलत है. हम चर सेट करने की जरूरत हैnumberA
इंटरफेस पैरामीटर परःnumberA@isShowA
.
इस तरह, यदि पैरामीटरisShowA
जाँच नहीं की जाती है, पैरामीटरnumberA
ComboBox नियंत्रण प्रकार के मापदंडों के लिए के रूप में, मापदंडों के आश्रित भाग का न्याय करने के लिए है कि क्या मापदंड मूल्य के बराबर हैसूचकांक मूल्यकॉम्बोबॉक्स में कुछ विकल्प का. उसी तरह, पैरामीटर लेisShowA
एक उदाहरण के रूप में. जब पैरामीटर में चर सेट, लिखेंःnumberA@combox==2
. पैरामीटरnumberA
प्रदर्शित करेगा या छिपा, पर निर्भर करता है कि पैरामीटरcombox
तीसरे विकल्प के रूप में जाँच की जाएगी (जहां सूचकांक 0 पहले विकल्प के अनुरूप है, सूचकांक 1 दूसरे के अनुरूप है, और सूचकांक 2 तीसरे के अनुरूप है) ।
(?First group)
निम्नलिखित चित्र में दिखाए गए अनुसार, समूह को शुरू करने वाले पैरामीटर के वर्णन की शुरुआत मेंः
जब आप रणनीति का उपयोग कर रहे हैं, तो पैरामीटर समूहों में प्रदर्शित होते हैंः
पैरामीटर डिफ़ॉल्ट मान सहेजेंः
रणनीति पैरामीटर चित्र में दिखाए गए हैं। बैकटेस्ट के दौरान, यदि आप रणनीति पैरामीटर के डिफ़ॉल्ट मानों को सहेजना चाहते हैं, तो आप क्लिक कर सकते हैंSave settings
रणनीति मापदंडों को संशोधित करने के बाद बटन.
आप रणनीति पैरामीटर सेटिंग्स को कोड के रूप में सहेज सकते हैंः
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
कुछ कार्यों के साथ मूलJSON
कॉल के दौरान अनुरोधित डेटा।JSON
डेटा विशेषता में संग्रहीत हैInfo
वापस आइटम के बाद से बैकटेस्ट एक मंच इंटरफ़ेस का उपयोग करने के लिए नहीं है, बैकटेस्ट के दौरान लौटाया डेटा कोई विशेषता हैInfo
निम्नलिखित प्रत्येक डेटा संरचना के मुख्य गुणों का वर्णन है।
फ़ंक्शन द्वारा लौटाए गए सभी ट्रेडिंग इतिहास (स्वयं नहीं) प्राप्त करेंexchange.GetTrades()
.
{
Id : 9585306, // Trading record ID; if the exchange interface does not provide order ID, use the timestamp to fill in
Time : 1567736576000, // Time (Unix timestamp milliseconds)
Price : 1000, // Price
Amount : 1, // Volume
Type : 0 // Order Type; refer to the order type in the constants; 0 is ORDER_TYPE_BUY, meaning the value of ORDER_TYPE_BUY is 0
}
बाजार उद्धरण फ़ंक्शन द्वारा लौटाए जाते हैंexchange.GetTicker()
.
{
Info : {...}, // After requesting the platform interface, this attribute is not available in the raw data that the exchange interface responds to, during the backtest
High : 1000, // Highest price; if the platform interface does not provide the 24-hour highest price, use sell price 1 to fill in
Low : 500, // Lowest price; if the platform interface does not provide the 24-hour lowest price, use buy price 1 to fill in
Sell : 900, // Sell price 1
Buy : 899, // Buy price 1
Last : 900, // Last executed price
Volume : 10000000, // Recent trading volume; in principle, the unit of spot trading volume is base currency, and the unit of futures trading volume is contract quantity. If the platform interface does not provide this kind of data, use the existing data of the platform interface to fill in; for instance, it might be a trading volume in the unit of quote currency
Time : 1567736576000 // Millisecond-level timestamp
}
मानकOHLC
संरचना का उपयोग के-लाइन और प्रक्रिया संकेतक गणना और विश्लेषण को आकर्षित करने के लिए किया जाता है।exchange.GetRecords()
संरचना सरणी लौटाता है. प्रत्येकRecord
संरचना एक k-लाइन बार का प्रतिनिधित्व करती है, अर्थात् एक k-लाइनBAR
.Time
मेंRecord
के-लाइन बार अवधि का आरंभ समय है।
{
Time : 1567736576000, // A timestamp, accurate to millisecond, in the same format as the result obtained by Javascript's newDate().GetTime()
Open : 1000, // Open price
High : 1500, // Highest price
Low : 900, // Lowest price
Close : 1200, // Close price
Volume : 1000000 // Trading volume; in principle, the unit of spot trading volume is base currency, and the unit of futures trading volume is contract quantity. If the platform interface does not provide this kind of data, use the existing data of the platform interface to fill in; for instance, it might be a trading volume in the unit of quote currency
}
आदेश संरचना सहित कार्यों द्वारा लौटाया जा सकता है,exchange.GetOrder()
औरexchange.GetOrders()
. कार्यexchange.GetOrders()
परत सरणी या संरचना की एक खाली सरणी (यदि कोई नहीं हैवर्तमान अधूरा आदेश, लौटाना[]
, अर्थात्, एक खाली सरणी) ।
{
Info : {...}, // After requesting the platform interface, this attribute is not available in the raw data that the exchange interface responds to, during the backtest
Id : 123456, // Unique ide